package 我的Java学习_算法基础.day_06;

import java.util.HashMap;
import java.util.Map;

public class _102_素数的测试及质因数分解 {
    public static void main(String[] args) {
        int a = 1,b = 80;
        System.out.println(isPrime(a));
        Map<Integer,Integer> map = primeFactor(b);
        printPrimeFactor(map);
    }
    //一个大于1的自然数，除了1和它自身外，不能被其他自然数整除的数叫做质数（素数），2是最小的质数，唯一的偶质数
    public static boolean isPrime(int n){
        if(n<=1){
            return false;
        }
        for(int i=2;i*i<=n;i++){
            if(n%i==0){
                return false;
            }
        }
        return true;
    }
    public static Map<Integer,Integer> primeFactor(int num){
        Map<Integer,Integer> map = new HashMap<>();//质因数出现次数
        for(int i =2;i*i<=num;i++){
            while(num%i==0){
                Integer v = map.get(i);
                if(v==null){
                    map.put(i,1);
                }else{
                    map.put(i,v+1);
                }
                num/=i;
            }
            if(isPrime(num)){   //如传入一个质数，没有此句，则没有内容。或15时没有5
                map.put(num,1);
            }
        }

        return map;
    }
    private  static void printPrimeFactor(Map<Integer,Integer> map){
        StringBuilder sb = new StringBuilder();
        for(Map.Entry<Integer,Integer> entry:map.entrySet()){
            int k = entry.getKey();
            int v = entry.getValue();
            for(int i=0;i<v;i++){
                sb.append("*"+k);
            }
        }
        System.out.println(sb.substring(1));
    }
}
